package com.sunop.panticommon.config;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

@Configuration
public class RateLimitCacheConfig {

    /**
     * 用户 QPS 计数缓存
     * Key: userId, Value: 当前计数
     */
    @Bean
    public Cache<String, AtomicInteger> userQpsCache() {
        return Caffeine.newBuilder()
                .expireAfterWrite(1, TimeUnit.SECONDS) // 1秒滑动窗口
                .build();
    }

    /**
     * IP 请求计数缓存
     * Key: IP地址, Value: 当前计数
     */
    @Bean
    public Cache<String, AtomicInteger> ipRequestCache() {
        return Caffeine.newBuilder()
                .expireAfterWrite(1, TimeUnit.MINUTES) // 1分钟窗口
                .build();
    }

    /**
     * IP 黑名单缓存
     * Key: IP地址, Value: 封禁时间（毫秒）
     */
    @Bean
    public Cache<String, Long> ipBlacklistCache() {
        return Caffeine.newBuilder()
                .expireAfterWrite(10, TimeUnit.MINUTES) // 10分钟自动解封
                .build();
    }
}